package com.ruoyi.common.config.mybatis;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.ruoyi.common.core.domain.BaseEntity;
import org.apache.ibatis.annotations.Param;

import java.io.Serializable;
import java.util.Collection;

/**
 * @Classname CustomBaseMapper
 * @Author: sunluquan
 * @Date: 2021/12/23 09:52
 * @Description TODO
 */
public interface CustomBaseMapper<T extends BaseEntity> extends BaseMapper<T>{

    /**
     * 根据 entity 条件，逻辑删除此记录
     *
     * @param queryWrapper 实体对象封装操作类（可以为 null,里面的 entity 用于生成 where 语句）
     * @return 受影响行数
     */
    int logicDelete(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

    /**
     * 根据 ID 逻辑删除此纪录
     *
     * @param id 主键ID
     * @return 返回受影响行数
     */
    int logicDeleteById(Serializable id);

    /**
     * 根据 ID集合 逻辑删除此纪录
     *
     * @param ids 主键ID集合
     * @return 返回受影响行数
     */
    int logicDeleteBatchByIds(@Param(Constants.COLLECTION)Collection<? extends Serializable> ids);

    /**
     * 根据 ID 将标记为删除 置为 未删除标识
     *
     * @param id 主键ID
     * @return 返回受影响行数
     */
    int recoverById(Serializable id);

    /**
     * 根据 IDs 将标记为删除 置为 未删除标识
     *
     * @param ids 主键ID集合
     * @return 返回受影响行数
     */
    int recoverBatchByIds(@Param(Constants.COLLECTION)Collection<? extends Serializable> ids);
}
